package puntaelena.facilitylocation.hillclimbing.experiment.observeneighbors;

import laboratoryQ.experiment.settings.BaseExperimentSettings;
import laboratoryQ.experiment.settings.SettingsAnnotations.*;
import puntaelena.graphsupport.solver.IFacilityLocationSolver;
import puntaelena.graphsupport.IGraphGenerator;

public class PuntaElenaExperimentSettings extends BaseExperimentSettings { // TODO: rename VariateNeighborsCountExperimentSettings
	@Hidden
	public IGraphGenerator graphGenerator;

	@Increase(value = 5, boundBegin = 1, boundEnd = 1000)
	public int citiesCount = -1;
	@Increase(value = 1, boundBegin = 1, boundEnd = 17)
	public int facilitiesCount = -1;
	
	@Increase(value = 5, boundBegin = 1, boundEnd = 10000)
	public int citiesCountBig = -1;
	@Increase(value = 1, boundBegin = 1, boundEnd = 300)
	public int facilitiesCountBig = -1;

	@Increase(value = 1, boundBegin = 1, boundEnd = 15)
	public int neighborCountBeg = -1;
	@Increase(value = 1, boundBegin = 1, boundEnd = 15)
	public int neighborCountEnd = -1;
	
	@Increase(value = 1, boundBegin = 1, boundEnd = 50)
	public int neighborCountBegBig = -1;
	@Increase(value = 1, boundBegin = 1, boundEnd = 50)
	public int neighborCountEndBig = -1;

	@Increase(value = 10, boundBegin = 0, boundEnd = 1<<30)
	public double cheapEdgeBeg = -1;
	@Increase(value = 10, boundBegin = 0, boundEnd = 1<<30)
	public int cheapEdgeRange = -1;
	@Increase(value = 10, boundBegin = 0, boundEnd = 1<<30)
	public double expensiveEdgeBeg = -1;
	@Increase(value = 10, boundBegin = 0, boundEnd = 1<<30)
	public int expensiveEdgeRange = -1;
	@Increase(value = 10, boundBegin = 0, boundEnd = 1<<30)
	public double facilityPriceBeg = -1;
	@Increase(value = 10, boundBegin = 0, boundEnd = 1<<30)
	public int facilityPriceRange = -1;

	@Hidden
	@IgnoreWhenCheck
	public IFacilityLocationSolver[] testingSolvers = {};

	public PuntaElenaExperimentSettings() {
		experimentContextFactory = new PuntaElenaExperimentContextFactory(); // TODO: make an arguments of superclass
		experiment = new PuntaElenaExperiment();
	}
}
